const { Op } = require("sequelize");
const systemConfigModel = appRequire('models/systemConfig');
const tokenHelper = appRequire('common/tokenHelper');

// 导出对象，供其它模块调用
module.exports = {
    getTokenList,
    updateToken
};

/**
 * 获取所有token配置列表
 * 包含有效期状态计算
 */
async function getTokenList(req, res) {
    try {
        const returnData = Common.clone(Constant.DEFAULT_SUCCESS);

        // 获取所有配置
        const configs = await systemConfigModel.findAll({
            order: [['objectId', 'ASC']]
        });

        // 计算有效期状态
        const now = Date.now();
        const sevenDaysInMs = 7 * 24 * 60 * 60 * 1000; // 7天的毫秒数

        const configsWithStatus = configs.map(config => {
            const configData = config.toJSON();
            const expiresTime = parseInt(configData.expiresTime);
            const remainingTime = expiresTime - now;
            const remainingDays = Math.floor(remainingTime / (24 * 60 * 60 * 1000));

            // 计算状态
            let status = 'normal'; // 正常
            if (remainingTime < 0) {
                status = 'expired'; // 已过期
            } else if (remainingTime < sevenDaysInMs) {
                status = 'warning'; // 即将过期（7天内）
            }

            return {
                ...configData,
                remainingDays, // 剩余天数
                status // 状态：normal/warning/expired
            };
        });

        returnData.data = configsWithStatus;
        return res.json(returnData);

    } catch (error) {
        console.error('获取token列表失败:', error);
        const returnData = Common.clone(Constant.DEFAULT_ERROR);
        returnData.msg = '获取token列表失败: ' + error.message;
        return res.json(returnData);
    }
}

/**
 * 更新token配置
 * 参数：
 * - configKey: 配置键
 * - configValue: 配置值（token）
 * - expiresTime: 过期时间戳（可选，不传则默认30天后）
 */
async function updateToken(req, res) {
    try {
        const returnData = Common.clone(Constant.DEFAULT_SUCCESS);
        const { configKey, configValue, expiresTime } = req.body;

        // 参数校验
        if (!configKey || !configValue) {
            returnData.code = 0;
            returnData.msg = '参数不完整';
            return res.json(returnData);
        }

        // 查找配置
        const config = await systemConfigModel.findOne({
            where: { configKey }
        });

        if (!config) {
            returnData.code = 0;
            returnData.msg = `配置项 ${configKey} 不存在`;
            return res.json(returnData);
        }

        // 计算过期时间（如果未传，默认30天后）
        const finalExpiresTime = expiresTime || (Date.now() + 30 * 24 * 60 * 60 * 1000);

        // 更新配置
        await systemConfigModel.update(
            {
                configValue,
                expiresTime: finalExpiresTime
            },
            {
                where: { configKey }
            }
        );

        // 清除缓存，确保下次读取最新值
        tokenHelper.clearCache(configKey);

        returnData.msg = '更新成功';
        returnData.data = {
            configKey,
            configValue,
            expiresTime: finalExpiresTime
        };

        return res.json(returnData);

    } catch (error) {
        console.error('更新token失败:', error);
        const returnData = Common.clone(Constant.DEFAULT_ERROR);
        returnData.msg = '更新token失败: ' + error.message;
        return res.json(returnData);
    }
}
